Artificial Neural Network, ANN

인공신경망(Artificial Neural Network, ANN)
인공신경망은 인간의 뇌를 모방하여 만들어진 학습 및 추론 모형이다.

인공신경망 분석에서 값이 입력되면, 개별 신호의 정도에 따라 값이 가중된다.
가중된 값에 편향(bias)이라는 상수를 더해서 활성함수를 거치면, 인공신경망의 출력값이 생성된다.

인공신경망의 등장과 발전으로 머신러닝(Machine Learning)을 넘어서
딥러닝(Deep Learning)이 등장했으며, 현재의 CNN, RNN 등과 같은 알고리즘의 기반을 마련했다.
활성함수
Step함수 기본적인 활성함수로, 0 또는 1을 반환하는 이진형 함수이다.
Sigmoid 함수 로지스틱회귀분석의 확률값을 구하기 위한 계산 식과 유사하며, 0과 1사이의 값을 반환
Sign 함수 기본적인 활성함수로,  -1 또는 1을 반환하는 이진형 함수이다.
tanh 함수 확장된 형태의 시그모이드 함수로 중심값은 0이며, -1과 1사이의 값을 출력한다.
ReLU 함수 최근 딥러닝에서 가장 많이 사용되는 함수로 입력값과 0중에서 큰 값을 반환한다.
Softmax 함수 표준화지수 함수, 출력값이 다범주인 경우 사용(확률값을 반환한다.)
install.packages(‘neuralnet’)

> library(neuralnet)

> index<-sample(c(1, 2), nrow(iris), replace=T, prob=c(0.7, 0.3))

> train<-iris[index==1, ]

> test<-iris[index==2, ]


#act.fct는 활성함수로 기본값은 logistic(Sigmoid)이다. 이외에 tanh도 사용가능

# 4개의 은닉노드를 가지는 2개의 은닉층

> result<-neuralnet(data=train, Species~., hidden=c(4, 4), stepmax=1e7)


> pred<-predict(result, newdata=test)

> head(pred, 5)

        [,1]          [,2]         [,3]

1  0.9989869  0.0010169890 1.261767e-05

5  0.9975306  0.0024718610 1.406149e-05

8  0.9996944  0.0003102363 1.188934e-05

14 1.0013386 -0.0013323100 1.031640e-05

16 0.9930177  0.0069801541 1.847615e-05


# 출력변수로 ‘setosa’, ‘versicolor’, ‘virginica’의 3개의 변수를 보유


> predicted_class<-c()

> for(i in 1:nrow(test)){

+  loc<-which.max(pred[i, ])

+  if(loc==1){

+    predicted_class<-c(predicted_class, 'setosa')

+  }else if(loc==2){

+    predicted_class<-c(predicted_class, 'versicolor')

+  }else{

+    predicted_class<-c(predicted_class, 'virginica')

+  }

+}

> head(predicted_class, 5)

[1] "setosa" "setosa" "setosa" "setosa" “setosa"


> pred<-predict(result, newdata=test)

> table(condition=test$Species, predicted_class)

            predicted_class

condition    setosa versicolor virginica

  setosa         11          0         0

  versicolor      0         11         0

  virginica       0          0        11